Ext.onReady(function() {
	var Tree = Ext.tree;
	var tree = new Tree.TreePanel({
				id : 'depttree',
				width : 400,
				height : 500,
				useArrows : true,
				frame : true,
				autoScroll : true,
				animate : true,
				singleExpand : false,
				containerScroll : true,
				border : false,
				loader : new Ext.tree.TreeLoader({
							url : _ctxPath + '/genDeptTree.do'
						}),
				rootVisible : true,
				root : {
					nodeType : 'async',
					id : 34000000,
					text : '机构管理',
					// id : _curUser.deptid,
					// text : _curUser.deptname,
					expanded : true
				},

				tbar : new Ext.Toolbar({
							items : [{
										xtype : 'button',
										iconCls : 'btn-refresh',
										text : '刷新',
										handler : function() {
											tree.root.reload();
										}
									}, '-', {
										xtype : 'button',
										text : '展开',
										iconCls : 'btn-expand',
										handler : function() {
											tree.root.expand();
											tree.root.expandChildNodes();
										}
									}, '-', {
										xtype : 'button',
										text : '收起',
										iconCls : 'btn-collapse',
										handler : function() {
											tree.collapseAll();
										}
									}, '->', {
										xtype : 'button',
										text : '帮助',
										iconCls : 'btn-doc',
										handler : function() {
											Ext.Msg.alert('帮助',
													'选择机构单击右键可以进行相关操作！');
										}
									}]
						})
			});
	tree.on("click", function(node, e) {
				if (node.isLeaf()) {
					e.stopEvent();
				}
			});
	tree.on("contextmenu", function(node, e) {
				var menu = new Ext.menu.Menu([{
							text : '添加',
							iconCls : 'add',
							handler : function(item, e) {
								editNode(node, "add");
							}
						}, {
							text : '编辑',
							iconCls : 'edit',
							handler : function(item, e) {
								editNode(node, "edit");
							}
						}, {
							text : '删除',
							iconCls : 'remove',
							handler : function(item, e) {
								remove(node);
							}
						}]);
				menu.showAt(e.getXY());
			}); // end
	function remove(node) {
		Ext.Msg.confirm('删除机构',
				'删除机构会同时删除其下所有子机构,你确认要删除<SPAN style="COLOR: red">' + node.text
						+ '</SPAN>机构吗?', function(btn, text) {
					if (btn === 'yes') {
						Ext.Ajax.request({
									url : _ctxPath + 'delDept.do',
									params : {
										'dept.id' : node.id
									},
									success : function(response, options) {
										Ext.Msg.alert('删除成功', '机构' + node.text
														+ '删除成功');
										Ext.getCmp('depttree').getRootNode()
												.reload();
									},
									failure : function(response, options) {
										Ext.Msg.alert('删除失败', '机构' + node.text
														+ '删除失败');
									}
								});
					}
				});
	}
	function editNode(node, flaq) {
		// 添加和编辑大窗口 ext-tree-edit-win
		var win = new Ext.Window({
					id : 'ext-tree-edit-win',
					autoScroll : true,
					title : '机构维护',
					width : 450,
					autoHeight : true
				});
		var parentId = new Ext.form.TextField({
					id : 'node-parent-id',
					name : 'dept.sjbmid',
					hidden : true,
					hideLabel : true
				}); // parentId：父机构ID
		var parentName = new Ext.form.TextField({ // parentName：父机构名称
			id : 'node-parent-text',
			name : 'dept.sjbmmc',
			allowBlank : false, // 是否允许为空
			msgTarget : 'under',
			blankText : '父机构名称不能为空',// 提示信息
			width : 80,
			fieldLabel : '上级机构',
			readOnly : true,
			listeners : {
				render : function(ct) {
					var parentEl = this.getEl().up('div.x-form-element');
					if (parentEl) {
						var child = parentEl.createChild({
									tag : 'button',
									'class' : "btn-selecttree",
									title : '选择父节点'
								});
						child.on('click', function(btn) {
							if (Ext.getCmp('parent-node-select-win')) {
								Ext.getCmp('parent-node-select-win').destroy();
							}
							var win = new Ext.Window({
										autoScroll : true,
										id : 'parent-node-select-win',
										title : '选择父机构',
										width : 200,
										height : 350,
										x : btn.getXY()[0] + 100,
										y : btn.getXY()[1] - 50,
										buttons : [{
													text : "确定",
													handler : function(btn, e) {
														win.destroy();
													}
												}]
									});

							if (!Ext
									.get('faceye-example-ext-tree-node-select-tree')) {
								Ext.getBody().createChild({
									tag : 'div',
									id : 'faceye-example-ext-tree-node-select-tree'
								});
							}

							var tree = new Ext.tree.TreePanel({
								id : 'faceye-example-ext-tree-node-select-tree-panel',
								el : 'faceye-example-ext-tree-node-select-tree',
								autoScroll : true,
								animate : true,
								frame : true,
								autoHeight : true,
								border : false,
								enableDD : true,
								containerScroll : true,
								rootVisible : true,
								loader : new Ext.tree.TreeLoader({
											dataUrl : 'genDeptTree.do'
										})
							}); // tree end
							root = new Ext.tree.AsyncTreeNode({
										text : '合肥市公安局',
										draggable : false,
										id : 34000000
									});
							tree.on('click', function(node, e) {
										parentId.setValue(node.id);
										parentName.setValue(node.text);
										if (node.isLeaf()) {
											e.stopEvent();
										} else {
											node.toggle();
										}
									});
							tree.setRootNode(root);
							tree.render();
							root.expand();
							win.add(tree);
							win.show();
						});
					} // if end
				} // render 结束
			}// listeners end
		}); // parentName end

		var editForm = new Ext.form.FormPanel({
			labelWidth : 80,
			url : _ctxPath + 'updateDept.do',
			frame : true,
			bodyStyle : 'padding:5px 5px 0',
			autoWidth : true,
			autoHeight : true,
			margins : '5 5 5 5',
			monitorValid : true,
			layout : 'form',
			defaultType : 'textfield',
			defaults : {
				width : 200
			},
			reader : new Ext.data.JsonReader({
						success : true,
						fields : [{
									name : 'dept.id',
									mapping : 'id'
								}, {
									name : 'dept.lev',
									mapping : 'lev'
								}, {
									name : 'dept.bmbh',
									mapping : 'bmbh'
								}, {
									name : 'dept.bmmc',
									mapping : 'bmmc'
								}, {
									name : 'dept.bmfzr',
									mapping : 'bmfzr'
								}, {
									name : 'dept.sjbmid',
									mapping : 'sjbmid'
								}, {
									name : 'dept.bmpx',
									mapping : 'bmpx'
								}, {
									name : 'dept.bmbz',
									mapping : 'bmbz'
								}, {
									name : 'dept.sjbmmc',
									mapping : 'sjbmmc'
								}, {
									name : 'dept.xfjfflag',
									mapping : 'xfjfflag'
								}, {
									name : 'dept.xfflag',
									mapping : 'xfflag'
								}, {
									name : 'dept.xflxid',
									mapping : 'xflxid'
								}, {
									name : 'dept.leaf',
									mapping : 'leaf'
								}]
					}),// reader end
			items : [parentId, parentName, {
						fieldLabel : '机构编号',
						name : 'dept.bmbh',
						readOnly : true
					}, {
						xtype : 'numberfield',
						fieldLabel : '机构级别',
						readOnly : true,
						id : 'lev',
						name : 'dept.lev'
					}, {
						fieldLabel : '机构名称',
						name : 'dept.bmmc',
						allowBlank : false,
						msgTarget : 'under',
						blankText : '机构名称不能为空',
						maxLength : 50,
						maxLengthText : '机构名称不能超过50个字符.'
					}, {
						xtype : 'radiogroup',
						name : 'dept.leaf',
						fieldLabel : '是否有子机构',
						items : [{
									boxLabel : '是',
									name : 'dept.leaf',
									inputValue : false
								}, {
									boxLabel : '否',
									name : 'dept.leaf',
									inputValue : true,
									checked : true
								}]
					}, {
						fieldLabel : '机构负责人',
						name : 'dept.bmfzr'
					}, {
						xtype : 'numberfield',
						fieldLabel : '排序',
						name : 'dept.bmpx'
					}, {
						xtype : 'textarea',
						fieldLabel : '机构说明',
						name : 'dept.bmbz'
					}, {
						name : 'dept.id',
						hidden : true,
						hideLabel : true
					}],
			buttons : [{
				text : '提交',
				formBind : true,
				disabled : false,
				type : 'submit',
				handler : function(btn, e) {
					if (flaq == "edit") {
						editForm.getForm().submit({
							method : 'POST',
							waitMsg : '正在保存数据...',
							failure : function(form, action) {
								switch (action.failureType) {
									case Ext.form.Action.CLIENT_INVALID :
										Ext.Msg.alert('操作失败', '无效的表单数值');
										break;
									case Ext.form.Action.CONNECT_FAILURE :
										Ext.Msg.alert('操作失败', '请求连接失败');
										break;
									case Ext.form.Action.SERVER_INVALID :
										Ext.Msg.alert('操作失败',
												action.result.message);
								}

							},
							success : function(form, action) {
								Ext.getCmp('depttree').getRootNode().reload();
								win.destroy();
							}
						});
					}
					if (flaq == "add") {
						editForm.getForm().submit({
							method : 'POST',
							url : _ctxPath + 'addDept.do',
							waitMsg : '正在保存数据...',
							failure : function(form, action) {
								switch (action.failureType) {
									case Ext.form.Action.CLIENT_INVALID :
										Ext.Msg.alert('操作失败', '无效的表单数值');
										break;
									case Ext.form.Action.CONNECT_FAILURE :
										Ext.Msg.alert('操作失败', '请求连接失败');
										break;
									case Ext.form.Action.SERVER_INVALID :
										Ext.Msg.alert('操作失败',
												action.result.message);
								}
							},
							success : function(form, action) {
								Ext.getCmp('depttree').getRootNode().reload();
								win.destroy();
							}
						});
					}
				}
			}, {
				text : '重置',
				type : 'submit',
				handler : function(btn, e) {
					editForm.getForm().reset();
				}
			}, {
				text : '放弃',
				type : 'submit',
				handler : function(btn, e) {
					win.destroy();
				}
			}]
				// buttons end
			}); // editForm end
		// editForm.getForm().clearInvalid(); 不起作用
		if (flaq == "edit") {
			editForm.getForm().load({
						url : _ctxPath + 'viewDept.do',
						params : {
							'dept.id' : node.id
						},
						waitMsg : '靖稍候...'
					});
		}
		if (flaq == "add") {
			Ext.getCmp('node-parent-id').setValue(node.id);
			Ext.getCmp('node-parent-text').setValue(node.text);
			Ext.getCmp('lev').setValue(node.getDepth());
		}
		win.add(editForm);
		win.show();
	}// end 添加和修改
	tree.render('tree-div');
	tree.getRootNode().expand();
		// tree.expandAll();
});